/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package easy.core.bean;


import easy.constants.BeansName;
import easy.constants.EstadoCivilOptions;
import easy.constants.SexoOptions;
import easy.constants.TipoPessoaOptions;
import easy.constants.TipoTelefoneOptions;
import easy.core.util.ValidaEmail;
import easy.entities.Cliente;
import easy.entities.Contato;
import easy.entities.Email;
import easy.entities.Endereco;
import easy.entities.PessoaFisica;
import easy.entities.PessoaJuridica;
import easy.entities.Site;
import easy.entities.Telefone;
import java.util.ArrayList;
import java.util.List;
import javax.faces.context.FacesContext;

/**
 *
 * @author DanielPinheiro
 */

public class ClienteManagedBean extends BaseBean {
    private static final long serialVersionUID = 2757386691613481154L;

    //Constantes e SelectItens
    private TipoPessoaOptions tiposDePessoas    = new TipoPessoaOptions();
    private SexoOptions sexo                    = new SexoOptions();
    private EstadoCivilOptions estadoCivil      = new EstadoCivilOptions();
    private TipoTelefoneOptions tiposDeTelefone = new TipoTelefoneOptions();

    //Objetos com propriedades setadas na tela
    private Cliente cliente             = new Cliente();
    private Telefone telefoneInformado  = new Telefone();
    private Telefone telefoneInformadoContato  = new Telefone();
    private Email emailInformadoContato        = new Email();
    private Endereco enderecoInformado = new Endereco();


    private Site siteInformado          = new Site();
    private Contato contatoInformado    = new Contato();

    //Listas
    private List<Telefone> listaTelefone  = new ArrayList<Telefone>();
    private List<Telefone> listaTelefoneContato  = new ArrayList<Telefone>();
    private List<Email> listaEmailContato        = new ArrayList<Email>();
    private List<Site> listaSite          = new ArrayList<Site>();
    private List<Endereco> listaEndereco          = new ArrayList<Endereco>();

    private PessoaFisica dadosPessoais  = new PessoaFisica();

    private String tipoDePessoaSelecionado;

    //Controle de renderizações
    private boolean renderedCamposPessoaFisica;
    private boolean renderedCamposPessoaJuridica;

    private boolean renderedInclusaoTelefone;
    private boolean renderedInclusaoEmail;
    private boolean renderedInclusaoSite;
    private boolean renderedInclusaoContato;
    private boolean renderedInclusaoEndereco;

    private boolean renderedListaTelefoneCliente;
    private boolean renderedListaTelefoneClienteContato;
    private boolean renderedListaEmailClienteContato;
    private boolean renderedListaSiteCliente;
    private boolean renderedListaContatoCliente;
    private boolean renderedListaEnderecoCliente;

    private boolean renderedBotaoSalvar;
    private boolean renderedBotaoAdicionar;
    
    boolean controleEditar = false;

   ValidaEmail validaEmail = new ValidaEmail();

    public ClienteManagedBean() {
        renderedBotaoAdicionar=true;

    }

    private List<Email> getListaEmail(){
        EmailManagedBean emailBean = (EmailManagedBean) getBean(BeansName.EMAIL_MANAGED_BEAN);
        
        List<Email> listaEmail = new ArrayList<Email>();
        if(emailBean!=null){
            listaEmail = emailBean.getListaEmail();
        }
        return listaEmail;
    }
    
    public void excluirTelefone(){
    
         listaTelefone.remove(telefoneInformado);
                  
        telefoneInformado = new Telefone();

        if(listaTelefone.isEmpty()){
            renderedListaTelefoneCliente=false;
        }
    }
     public void excluirTelefoneContato(){

        listaTelefoneContato.remove(telefoneInformadoContato);

        telefoneInformadoContato = new Telefone();

        if(listaTelefoneContato.isEmpty()){
            renderedListaTelefoneClienteContato=false;
        }
    }

     public void adicionarTelefoneNaLista(){
        renderedListaTelefoneCliente=true;
        if(!controleEditar){
            getListaTelefone().add(telefoneInformado);
        }

        telefoneInformado = new Telefone();
        controleEditar=false;
    }

    public void adicionarTelefoneNaListaContato(){
        setRenderedListaTelefoneClienteContato(true);
        if(!controleEditar){
            listaTelefoneContato.add(telefoneInformadoContato);
        }

        telefoneInformadoContato = new Telefone();
        controleEditar=false;
    }
    public void salvarTelefone(){
        controleEditar=false;
        renderedBotaoAdicionar=true;
        renderedBotaoSalvar=false;
        telefoneInformado = new Telefone();
        
    }
     public void salvarTelefoneContato(){
        controleEditar=false;
        renderedBotaoAdicionar=true;
        renderedBotaoSalvar=false;
        telefoneInformadoContato = new Telefone();

    }





     public void excluirEmailContato(){
        listaEmailContato.remove(emailInformadoContato);
        emailInformadoContato = new Email();

         if(listaEmailContato.isEmpty()){
            setRenderedListaEmailClienteContato(false);
        }
    }


     public void salvarEmailContato(){
        controleEditar=false;
        renderedBotaoAdicionar=true;
        renderedBotaoSalvar=false;

        emailInformadoContato = new Email();
    }

    public void controlaTipoPessoa(){

        renderedInclusaoTelefone        = true;
        renderedInclusaoEmail           = true;
        renderedInclusaoSite            = true;
        renderedInclusaoContato  = true;
        renderedInclusaoEndereco = true;

        if(tipoDePessoaSelecionado.equals(TipoPessoaOptions.PESSOA_FISICA)){
            PessoaFisica pessoaFisica = new PessoaFisica();
            cliente.setPessoa(pessoaFisica);
            renderedCamposPessoaFisica      = true;
            renderedCamposPessoaJuridica    = false;
        }else{
            PessoaJuridica pessoaJuridica = new PessoaJuridica();
            cliente.setPessoa(pessoaJuridica);
            renderedCamposPessoaJuridica    = true;
            renderedCamposPessoaFisica      = false;
        }
    }

    //Qualquer edição
    public void editar(){
        
        controleEditar=true;
        renderedBotaoAdicionar=false;
        renderedBotaoSalvar=true;
    }

    public void adicionarSiteNaLista(){
        renderedListaSiteCliente=true;
        renderedInclusaoContato=true;

        if(controleEditar==false){
            listaSite.add(siteInformado);
        }

        siteInformado = new Site();
        controleEditar=false;
        renderedBotaoAdicionar=true;
        renderedBotaoSalvar=false;
    }

    public void excluirSite(){
        System.out.println("fsdfsdfafa");
        listaSite.remove(siteInformado);
        siteInformado = new Site();
        
         if(listaSite.isEmpty()){
            renderedListaSiteCliente=false;
        }
    }

    public void salvarSite(){
         controleEditar=false;
        renderedBotaoAdicionar=true;
        renderedBotaoSalvar=false;

        siteInformado = new Site();
    }
    public void adicionarEnderecoNaLista(){
         setRenderedListaEnderecoCliente(true);
         renderedInclusaoEndereco=true;

        if(controleEditar==false){
            listaEndereco.add(enderecoInformado);
        }

        enderecoInformado = new Endereco();
        controleEditar=false;
        renderedBotaoAdicionar=true;
        renderedBotaoSalvar=false;
    }
    public void salvarEndereco(){
        controleEditar=false;
        renderedBotaoAdicionar=true;
        renderedBotaoSalvar=false;

        enderecoInformado = new Endereco();
    }

    public void excluirEndereco(){
        
        listaEndereco.remove(enderecoInformado);
        enderecoInformado = new Endereco();
        
         if(listaEndereco.isEmpty()){
            renderedListaEnderecoCliente=false;
        }
    }


/**
     * @return the listaTelefone
     */
    public List<Telefone> getListaTelefone() {
        return listaTelefone;
    }

    /**
     * @param listaTelefone the listaTelefone to set
     */
    public void setListaTelefone(List<Telefone> listaTelefone) {
        this.setListaTelefone(listaTelefone);
    }

    /**
     * @return the cliente
     */
    public Cliente getCliente() {
        return cliente;
    }

    /**
     * @param cliente the cliente to set
     */
    public void setCliente(Cliente cliente) {
        this.cliente = cliente;
    }

    /**
     * @return the tiposDePessoas
     */
    public TipoPessoaOptions getTiposDePessoas() {
        return tiposDePessoas;
    }

    /**
     * @param tiposDePessoas the tiposDePessoas to set
     */
    public void setTiposDePessoas(TipoPessoaOptions tiposDePessoas) {
        this.tiposDePessoas = tiposDePessoas;
    }

    /**
     * @return the renderedCamposPessoaFisica
     */
    public boolean isRenderedCamposPessoaFisica() {
        return renderedCamposPessoaFisica;
    }

    /**
     * @param renderedCamposPessoaFisica the renderedCamposPessoaFisica to set
     */
    public void setRenderedCamposPessoaFisica(boolean renderedCamposPessoaFisica) {
        this.renderedCamposPessoaFisica = renderedCamposPessoaFisica;
    }

    /**
     * @return the tipoDePessoaSelecionado
     */
    public String getTipoDePessoaSelecionado() {
        return tipoDePessoaSelecionado;
    }

    /**
     * @param tipoDePessoaSelecionado the tipoDePessoaSelecionado to set
     */
    public void setTipoDePessoaSelecionado(String tipoDePessoaSelecionado) {
        this.tipoDePessoaSelecionado = tipoDePessoaSelecionado;
    }

    /**
     * @return the sexo
     */
    public SexoOptions getSexo() {
        return sexo;
    }

    /**
     * @param sexo the sexo to set
     */
    public void setSexo(SexoOptions sexo) {
        this.sexo = sexo;
    }

    /**
     * @return the estadoCivil
     */
    public EstadoCivilOptions getEstadoCivil() {
        return estadoCivil;
    }

    /**
     * @param estadoCivil the estadoCivil to set
     */
    public void setEstadoCivil(EstadoCivilOptions estadoCivil) {
        this.estadoCivil = estadoCivil;
    }

    /**
     * @return the renderedCamposPessoaJuridica
     */
    public boolean isRenderedCamposPessoaJuridica() {
        return renderedCamposPessoaJuridica;
    }

    /**
     * @param renderedCamposPessoaJuridica the renderedCamposPessoaJuridica to set
     */
    public void setRenderedCamposPessoaJuridica(boolean renderedCamposPessoaJuridica) {
        this.renderedCamposPessoaJuridica = renderedCamposPessoaJuridica;
    }

    /**
     * @return the telefoneInformado
     */
    public Telefone getTelefoneInformado() {
        return telefoneInformado;
    }

    /**
     * @param telefoneInformado the telefoneInformado to set
     */
    public void setTelefoneInformado(Telefone telefoneInformado) {
        this.telefoneInformado = telefoneInformado;
    }

    /**
     * @return the tiposDeTelefone
     */
    public TipoTelefoneOptions getTiposDeTelefone() {
        return tiposDeTelefone;
    }

    /**
     * @param tiposDeTelefone the tiposDeTelefone to set
     */
    public void setTiposDeTelefone(TipoTelefoneOptions tiposDeTelefone) {
        this.tiposDeTelefone = tiposDeTelefone;
    }

    /**
     * @return the renderedInclusaoTelefone
     */
    public boolean isRenderedInclusaoTelefone() {
        return renderedInclusaoTelefone;
    }

    /**
     * @param renderedInclusaoTelefone the renderedInclusaoTelefone to set
     */
    public void setRenderedInclusaoTelefone(boolean renderedInclusaoTelefone) {
        this.renderedInclusaoTelefone = renderedInclusaoTelefone;
    }

    /**
     * @return the renderedListaTelefoneCliente
     */
    public boolean isRenderedListaTelefoneCliente() {
        return renderedListaTelefoneCliente;
    }

    /**
     * @param renderedListaTelefoneCliente the renderedListaTelefoneCliente to set
     */
    public void setRenderedListaTelefoneCliente(boolean renderedListaTelefoneCliente) {
        this.renderedListaTelefoneCliente = renderedListaTelefoneCliente;
    }




    /**
     * @return the renderedInclusaoEmail
     */
    public boolean isRenderedInclusaoEmail() {
        return renderedInclusaoEmail;
    }

    /**
     * @param renderedInclusaoEmail the renderedInclusaoEmail to set
     */
    public void setRenderedInclusaoEmail(boolean renderedInclusaoEmail) {
        this.renderedInclusaoEmail = renderedInclusaoEmail;
    }




    /**
     * @return the renderedInclusaoSite
     */
    public boolean isRenderedInclusaoSite() {
        return renderedInclusaoSite;
    }

    /**
     * @param renderedInclusaoSite the renderedInclusaoSite to set
     */
    public void setRenderedInclusaoSite(boolean renderedInclusaoSite) {
        this.renderedInclusaoSite = renderedInclusaoSite;
    }

    /**
     * @return the renderedListaSiteCliente
     */
    public boolean isRenderedListaSiteCliente() {
        return renderedListaSiteCliente;
    }

    /**
     * @param renderedListaSiteCliente the renderedListaSiteCliente to set
     */
    public void setRenderedListaSiteCliente(boolean renderedListaSiteCliente) {
        this.renderedListaSiteCliente = renderedListaSiteCliente;
    }

    /**
     * @return the siteInformado
     */
    public Site getSiteInformado() {
        return siteInformado;
    }

    /**
     * @param siteInformado the siteInformado to set
     */
    public void setSiteInformado(Site siteInformado) {
        this.siteInformado = siteInformado;
    }

    /**
     * @return the renderedInclusaoContatoCliente
     */
    public boolean isRenderedInclusaoContato() {
        return renderedInclusaoContato;
    }

    /**
     * @param renderedInclusaoContato the renderedInclusaoContato to set
     */
    public void setRenderedInclusaoContato(boolean renderedInclusaoContato) {
        this.renderedInclusaoContato = renderedInclusaoContato;
    }

    /**
     * @return the renderedListaContatoCliente
     */
    public boolean isRenderedListaContatoCliente() {
        return renderedListaContatoCliente;
    }

    /**
     * @param renderedListaContatoCliente the renderedListaContatoCliente to set
     */
    public void setRenderedListaContatoCliente(boolean renderedListaContatoCliente) {
        this.renderedListaContatoCliente = renderedListaContatoCliente;
    }

    /**
     * @return the contatoInformado
     */
    public Contato getContatoInformado() {
        return contatoInformado;
    }

    /**
     * @param contatoInformado the contatoInformado to set
     */
    public void setContatoInformado(Contato contatoInformado) {
        this.contatoInformado = contatoInformado;
    }

    /**
     * @return the dadosPessoais
     */
    public PessoaFisica getDadosPessoais() {
        return dadosPessoais;
    }

    /**
     * @param dadosPessoais the dadosPessoais to set
     */
    public void setDadosPessoais(PessoaFisica dadosPessoais) {
        this.dadosPessoais = dadosPessoais;
    }

    /**
     * @return the renderedBotaoSalvar
     */
    public boolean isRenderedBotaoSalvar() {
        return renderedBotaoSalvar;
    }

    /**
     * @param renderedBotaoSalvar the renderedBotaoSalvar to set
     */
    public void setRenderedBotaoSalvar(boolean renderedBotaoSalvar) {
        this.renderedBotaoSalvar = renderedBotaoSalvar;
    }

    /**
     * @return the renderedBotaoAdicionar
     */
    public boolean isRenderedBotaoAdicionar() {
        return renderedBotaoAdicionar;
    }

    /**
     * @param renderedBotaoAdicionar the renderedBotaoAdicionar to set
     */
    public void setRenderedBotaoAdicionar(boolean renderedBotaoAdicionar) {
        this.renderedBotaoAdicionar = renderedBotaoAdicionar;
    }



    /**
     * @return the listaSite
     */
    public List<Site> getListaSite() {
        return listaSite;
    }

    /**
     * @param listaSite the listaSite to set
     */
    public void setListaSite(List<Site> listaSite) {
        this.listaSite = listaSite;
    }

    /**
     * @return the listaTelefoneContato
     */
    public List<Telefone> getListaTelefoneContato() {
        return listaTelefoneContato;
    }

    /**
     * @param listaTelefoneContato the listaTelefoneContato to set
     */
    public void setListaTelefoneContato(List<Telefone> listaTelefoneContato) {
        this.listaTelefoneContato = listaTelefoneContato;
    }

    /**
     * @return the listaEmailContato
     */
    public List<Email> getListaEmailContato() {
        return listaEmailContato;
    }

    /**
     * @param listaEmailContato the listaEmailContato to set
     */
    public void setListaEmailContato(List<Email> listaEmailContato) {
        this.listaEmailContato = listaEmailContato;
    }

    /**
     * @return the emailInformadoContato
     */
    public Email getEmailInformadoContato() {
        return emailInformadoContato;
    }

    /**
     * @param emailInformadoContato the emailInformadoContato to set
     */
    public void setEmailInformadoContato(Email emailInformadoContato) {
        this.emailInformadoContato = emailInformadoContato;
    }

    /**
     * @return the renderedListaEmailClienteContato
     */
    public boolean isRenderedListaEmailClienteContato() {
        return renderedListaEmailClienteContato;
    }

    /**
     * @param renderedListaEmailClienteContato the renderedListaEmailClienteContato to set
     */
    public void setRenderedListaEmailClienteContato(boolean renderedListaEmailClienteContato) {
        this.renderedListaEmailClienteContato = renderedListaEmailClienteContato;
    }

    /**
     * @return the telefoneInformadoContato
     */
    public Telefone getTelefoneInformadoContato() {
        return telefoneInformadoContato;
    }

    /**
     * @param telefoneInformadoContato the telefoneInformadoContato to set
     */
    public void setTelefoneInformadoContato(Telefone telefoneInformadoContato) {
        this.telefoneInformadoContato = telefoneInformadoContato;
    }

    /**
     * @return the renderedListaTelefoneClienteContato
     */
    public boolean isRenderedListaTelefoneClienteContato() {
        return renderedListaTelefoneClienteContato;
    }

    /**
     * @param renderedListaTelefoneClienteContato the renderedListaTelefoneClienteContato to set
     */
    public void setRenderedListaTelefoneClienteContato(boolean renderedListaTelefoneClienteContato) {
        this.renderedListaTelefoneClienteContato = renderedListaTelefoneClienteContato;
    }

    /**
     * @return the renderedInclusaoEndereco
     */
    public boolean isRenderedInclusaoEndereco() {
        return renderedInclusaoEndereco;
    }

    /**
     * @param renderedInclusaoEndereco the renderedInclusaoEndereco to set
     */
    public void setRenderedInclusaoEndereco(boolean renderedInclusaoEndereco) {
        this.renderedInclusaoEndereco = renderedInclusaoEndereco;
    }

    /**
     * @return the enderecoInformado
     */
    public Endereco getEnderecoInformado() {
        return enderecoInformado;
    }

    /**
     * @param enderecoInformado the enderecoInformado to set
     */
    public void setEnderecoInformado(Endereco enderecoInformado) {
        this.enderecoInformado = enderecoInformado;
    }

    /**
     * @return the renderedListaEnderecoCliente
     */
    public boolean isRenderedListaEnderecoCliente() {
        return renderedListaEnderecoCliente;
    }

    /**
     * @param renderedListaEnderecoCliente the renderedListaEnderecoCliente to set
     */
    public void setRenderedListaEnderecoCliente(boolean renderedListaEnderecoCliente) {
        this.renderedListaEnderecoCliente = renderedListaEnderecoCliente;
    }

    /**
     * @return the listaEndereco
     */
    public List<Endereco> getListaEndereco() {
        return listaEndereco;
    }

    /**
     * @param listaEndereco the listaEndereco to set
     */
    public void setListaEndereco(List<Endereco> listaEndereco) {
        this.listaEndereco = listaEndereco;
    }

   


}
